package cn.icare.cms;

import cn.icare.cms.model.vo.rest.MsgDatasVO;
import cn.icare.cms.model.vo.rest.RespMsgVO;
import cn.icare.cms.model.wx.ro.GetSessionRo;
import cn.icare.cms.model.wx.ro.WxConfig;
import cn.icare.cms.model.wx.ro.WxPayInfoRo;
import cn.icare.cms.model.wx.vo.SessionVo;
import cn.icare.cms.model.wx.vo.WxPayInfoVo;
import cn.icare.cms.model.wx.vo.WxUserInfoVo;

/**
 * 微信接口类
 */
public interface WxService {

    WxUserInfoVo getSessionByCode(WxConfig config, GetSessionRo ro);

    /**
     * 加密数据解密算法
     * 解密算法如下：
     * 对称解密使用的算法为 AES-128-CBC，数据采用PKCS#7填充。
     * 对称解密的目标密文为 Base64_Decode(encryptedData)。
     * 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。
     * 对称解密算法初始向量 为Base64_Decode(iv)，其中iv由数据接口返回。
     * 来源地址https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html
     * @param sessionKey     会话密钥
     * @param encryptedData  加密数据
     * @param iv 初始向量值由小程序传入
     * @return 返回解密后的数据
     */
    RespMsgVO getASEDecodeData(String sessionKey, String encryptedData, String iv);

    String getWXDecodeDate(WxConfig config, GetSessionRo ro,String encryptedData,String iv);


    String getOpenIdByCode(WxConfig config, String code);

    /**
     * 发送订单支付
     * @param ro
     * @return
     */
    WxPayInfoVo sendPay(String payApiUri, WxPayInfoRo ro);


    /**
     * 发送订单退款申请
     * @param ro
     * @return
     */
    WxPayInfoVo refund(String apiUri, WxPayInfoRo ro,String certPath);



}
